(function (window, undefined) {
	var 
		document  = window.document,
		navigator = window.navigator,
		location  = window.location;

	var Gui = (function() {

		//声明了一个jQuery副本
		var Gui = function (selector, context) {
			return new Gui.fn.init(selector, context);
		};
		hasOwn = Object.prototype.hasOwnProperty;
		Gui.fn = Gui.prototype = {
			constructor: Gui,
			init: function(selector, context) {
				var elem;
				if (!selector) {
					return this;
				}
				elem = document.querySelector(selector);
				this.length = 1;
				this[0] = elem;
				return this;
			},
			show: function() {
				console.log('true');
			}
		}

		Gui.fn.init.prototype = Gui.fn;

		Gui.extend = Gui.fn.extend = function() {
			var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {},
				i = 1,
				length = arguments.length,
				deep = false;

			// Handle a deep copy situation
			if (typeof target === "boolean") {
				deep = target;
				target = arguments[1] || {};
				// skip the boolean and the target
				i = 2;
			}

			// Handle case when target is a string or something (possible in deep copy)
			if (typeof target !== "object" && !Gui.isFunction(target)) {
				target = {};
			}

			// extend jQuery itself if only one argument is passed
			if (length === i) {
				target = this;
				--i;
			}

			for (; i < length; i++) {
				// Only deal with non-null/undefined values
				if ((options = arguments[i]) != null) {
					// Extend the base object
					for (name in options) {
						src = target[name];
						copy = options[name];

						// Prevent never-ending loop
						if (target === copy) {
							continue;
						}

						// Recurse if we're merging plain objects or arrays
						if (deep && copy && (Gui.isPlainObject(copy) || (copyIsArray = Gui.isArray(copy)))) {
							if (copyIsArray) {
								copyIsArray = false;
								clone = src && Gui.isArray(src) ? src : [];

							} else {
								clone = src && Gui.isPlainObject(src) ? src : {};
							}

							// Never move original objects, clone them
							target[name] = Gui.extend(deep, clone, copy);

							// Don't bring in undefined values
						} else if (copy !== undefined) {
							target[name] = copy;
						}
					}
				}
			}

			// Return the modified object
			return target;
		};

		Gui.extend({
			isFunction: function(obj) {
				return Gui.type(obj) === "function";
			},

			isArray: Array.isArray ||
			function(obj) {
				return Gui.type(obj) === "array";
			},

			isWindow: function(obj) {
				return obj != null && obj == obj.window;
			},

			isNumeric: function(obj) {
				return !isNaN(parseFloat(obj)) && isFinite(obj);
			},

			type: function(obj) {
				return obj == null ? String(obj) : class2type[toString.call(obj)] || "object";
			},
			isPlainObject: function(obj) {
				if (!obj || Gui.type(obj) !== "object" || obj.nodeType || Gui.isWindow(obj)) {
					return false;
				}

				try {
					if (obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
						return false;
					}
				} catch (e) {
					return false;
				}
				var key;
				for (key in obj) {}

				return key === undefined || hasOwn.call(obj, key);
			},
		})
		return Gui;

	})();
	var extendLists = {
		reinitIframe : function(){
			if (!this[0]) {
				return null;
			}
			var dHeight = this[0].contentWindow.document.documentElement.scrollHeight;
			this[0].height =  dHeight;
		}
	}
	Gui.fn.extend(extendLists);

	window.Gui = window.G = Gui;

})( window );
